﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace FlexFlow.Model
{
    /// <summary>
    /// 为流程状态提供枚举
    /// </summary>
    public enum ProcessState
    {
        /// <summary>
        /// 表示当前流程已创建，尚未开始安装
        /// </summary>
        Created,
        /// <summary>
        /// 表示当前流程正在安装
        /// </summary>
        Installing,
        /// <summary>
        /// 表示当前流程安装失败
        /// </summary>
        Error,
        /// <summary>
        /// 表示当前流程已安装成功
        /// </summary>
        Installed,
        /// <summary>
        /// 表示当前流程已被废弃
        /// </summary>
        Abandoned
    }
    /// <summary>
    /// 表示一个流程，流程为一系列活动与路径的集合
    /// </summary>
    [Serializable]
    public sealed class Process : PhysicalModel,INamedPhysicalModel
    {
        /// <summary>
        /// 表示当前流程的状态
        /// </summary>
        public ProcessState State { get; set; }
        /// <summary>
        /// 表示当前流程的名称
        /// </summary>
        public string Name { get; set; }
        /// <summary>
        /// 表示当前流程的版本号
        /// </summary>
        public string Version { get; set; }
        /// <summary>
        /// 表示当前流程的定义文件的ID
        /// </summary>
        public Guid DefineFileId { get; set; }
        /// <summary>
        /// 表示当前流程中定义的活动的集合
        /// </summary>
        public List<Activity> Activitys { get; set; }
        /// <summary>
        /// 表示当前流程中定义的路径的集合
        /// </summary>
        public List<FlowPath> Paths { get; set; }
        /// <summary>
        /// 表示当前流程的创建日期
        /// </summary>
        public DateTime CreateTime { get; set; }
        /// <summary>
        /// 表示当前流程的起始节点
        /// </summary>
        public Guid StartActivity { get; set; }
        /// <summary>
        /// 表示流程的安装者
        /// </summary>
        public Guid Installer { get; set; }
        /// <summary>
        /// 表示当前流程的状态信息
        /// </summary>
        public string Message { get; set; }
        /// <summary>
        /// 表示该活动的插槽集合
        /// </summary>
        /// <remarks>
        /// 在安装流程时引擎会自动将流程内活动插槽集合加入到该集合中
        /// </remarks>
        public DataSlot[] DataSlots { get; set; }
        /// <summary>
        /// 表示当前流程绑定的物理文件
        /// </summary>
        public Guid PhysicalFileId { get; set; }
    }
}
